package cn.peng.stu4teach.pages.todo;

import android.app.Application;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.recyclerview.widget.RecyclerView;

import com.blankj.utilcode.util.LogUtils;
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
import com.scwang.smart.refresh.layout.api.RefreshLayout;
import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
import com.scwang.smart.refresh.layout.listener.OnRefreshListener;

import java.util.ArrayList;
import java.util.List;

import cn.peng.stu4teach.bizutil.http.BizHttpGsonRe;
import cn.peng.stu4teach.pages.todo.bean.TodoDataBean;
import cn.peng.stu4teach.pages.todo.bean.TodoItem;
import cn.peng.stu4teach.util.http.HttpUtils;

/**
 * 功用：TodoFragment 中使用的 Vm
 */
public class TodoFmVm extends AndroidViewModel {
    /**
     * 数据页面，从0开始计数。
     * 不要与 TodoDataBean 中 curPage 弄混了，TodoDataBean 表示实际请求的是第几页数据，从1计数。
     */
    private int            mCurPage = 0;
    /**
     * 要展示的数据
     */
    private List<TodoItem> items    = new ArrayList<TodoItem>();
    private ToDoAdapter    mToDoAdapter;
    private SmartRefreshLayout mRefreshLayout;

    public TodoFmVm (@NonNull Application application) {
        super(application);
    }

    private void getDataList () {
        String url = String.format("https://www.wanandroid.com/article/list/%d/json", mCurPage);
        HttpUtils.sendGetRequest(url, new BizHttpGsonRe<TodoDataBean>(TodoDataBean.class) {
            @Override
            protected void onSuccess (@NonNull TodoDataBean pReData) {
                // 更新本地数据，并通知适配器刷新数据和界面
                if (mCurPage == 0) {
                    items = pReData.datas;
                    // 终止刷新视图动画
                    mRefreshLayout.finishRefresh();
                } else {
                    items.addAll(pReData.datas);
                    // 终止加载更多的动画
                    mRefreshLayout.finishLoadMore();
                }
                mToDoAdapter.setItems(items);

                //如果还有数据，页码自增。
                if (!pReData.over) {
                    mCurPage++;
                }
            }

            @Override
            protected void onError (@NonNull String pErrMsg) {
                Log.d("NetworkUtils", "GET ERROR: " + pErrMsg);

                if (mCurPage == 0 ) {
                    // 终止刷新视图的动画。第一个参数表示延时多长时间关闭，第二个参数表示是否刷新成功。
                    //mRefreshLayout.finishRefresh(2000,false);
                    mRefreshLayout.finishRefresh(false);
                }else{
                    // 终止加载更多的动画.传入false表示加载失败
                    mRefreshLayout.finishLoadMore(false);
                }
            }
        });
    }

    public void init () {
        getDataList();
    }

    public void initRv (RecyclerView pRv) {
        mToDoAdapter = new ToDoAdapter();
        pRv.setAdapter(mToDoAdapter);
        mToDoAdapter.setItems(items);
    }

    /**
     * 初始化刷新视图的事件
     * TODO：也可以使用 DataBindingAdapter 为这两个监听绑定一个 DataBinding 属性，绑定之后可以更加便捷的使用
     */
    public void initRefreshLayoutEvent (SmartRefreshLayout pRefreshLayout) {
        mRefreshLayout = pRefreshLayout;
        pRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh (@NonNull RefreshLayout refreshlayout) {
                mCurPage = 0;
                getDataList();
            }
        });

        pRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore (@NonNull RefreshLayout refreshlayout) {
                getDataList();
            }
        });
    }
}
